﻿using OsPortal;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Caching;

/// <summary>
/// Summary description for clsDanhMuc
/// </summary>
public class clsDanhMuc
{

    static string strClassName = "clsDanhMuc";

    public struct stDanhMuc
    {
        public Int32 iDM_ID;
        public Int32 iDM_PARENT_ID;
        public String strDM_TIEUDE;
        public String strDM_MOTA;
        public String strDM_NOIDUNG;
        public String strDM_ANH;
        public String strDM_COLOR;
        public DateTime strDM_NGAYTAO;
        public DateTime strDM_NGAYUPDATE;
        public String strDM_LOGO;
        public Int32 iDM_STATUS;
    }

    public clsDanhMuc()
    {
        //
        // TODO: Add constructor logic here
        //
    }


    public static bool DANHMUC_ACT(string strMod, clsDanhMuc.stDanhMuc objDanhMuc, out string strError)
    {
        try
        {
            DataTable dt;
            dt = oSqlDataHelper.sExecuteDataTable("DANHMUC_ACT", new SqlParameter[]{
                                                        new SqlParameter("@P_MOD",strMod),
                                                        new SqlParameter("@P_DM_ID",objDanhMuc.iDM_ID),
                                                        new SqlParameter("@P_DM_PARENT_ID",objDanhMuc.iDM_PARENT_ID),
                                                        new SqlParameter("@P_DM_TIEUDE",objDanhMuc.strDM_TIEUDE),
                                                        new SqlParameter("@P_DM_MOTA",objDanhMuc.strDM_MOTA),
                                                        new SqlParameter("@P_DM_NOIDUNG",objDanhMuc.strDM_NOIDUNG),
                                                        new SqlParameter("@P_DM_ANH",objDanhMuc.strDM_ANH),
                                                        new SqlParameter("@P_DM_COLOR",objDanhMuc.strDM_COLOR),
                                                        new SqlParameter("@P_DM_NGAYTAO",objDanhMuc.strDM_NGAYTAO),
                                                        new SqlParameter("@P_DM_NGAYUPDATE",objDanhMuc.strDM_NGAYUPDATE),
                                                        new SqlParameter("@P_DM_LOGO",objDanhMuc.strDM_LOGO),
                                                        new SqlParameter("@P_DM_STATUS",objDanhMuc.iDM_STATUS)
            });

            //DataTable dt = oSqlDataHelper.sExecuteDataTable("DANHMUC_ACT", new SqlParameter[]);

            //
            if (dt == null){strError = "";return true;}
            if (dt.Rows.Count <= 0){strError = "";return true;}
            //
            strError = OsPortal.oStringHelper.fncCnvNullToString(dt.Rows[0]["ERRNAME"]);
            return false;
        }
        catch (Exception ex)
        {
            oFileHelper.WriteLogErr(strClassName, "DANHMUC_ACT", ex.ToString());
            strError = "";
            return false;
        }

    }

    /// <summary>
    /// Lấy toàn bộ danh sách danh mục
    /// Author: ThuanNH
    /// Create: 09/11/2013
    /// </summary>
    /// <returns>DataTable</returns>
    public static DataTable fncGetAll()
    {
        // Lấy tham chiếu đến đối tượng Cache.
        Cache _cache = HttpContext.Current.Cache;
        DataTable dt = null;
        string strCacheHangSo = "";
        strCacheHangSo = "DANH_MUC_All";
        if (_cache[strCacheHangSo] == null)
        {
            try
            {
                dt = oSqlDataHelper.sExecuteDataTable("SELECT * FROM DANH_MUC WHERE DM_STATUS = 1");
                // Lưu giữ item trong cache
                // cùng với sliding expiration là 60 phút.
                if (dt != null && dt.Rows.Count > 0)
                {
                    HttpContext.Current.Cache.Insert(strCacheHangSo, dt, null, DateTime.Now.AddHours(5), Cache.NoSlidingExpiration);
                }
            }
            catch (Exception ex)
            {
                OsPortal.oFileHelper.WriteLogErr(strClassName, "GetAll", ex.ToString());
            }
        }
        else
        {
            dt = (DataTable)_cache[strCacheHangSo];
        }
        return dt;
    }

    /// <summary>
    /// Lấy toàn bộ danh sách danh mục dạng cây
    /// Author: ThuanNH
    /// Create: 09/11/2013
    /// </summary>
    /// <returns>DataTable</returns>
    public static DataTable fncGetTree()
    {
        // Lấy tham chiếu đến đối tượng Cache.
        Cache _cache = HttpContext.Current.Cache;
        DataTable dt = null;
        string strCacheHangSo = "";
        strCacheHangSo = "DANH_MUC_TREE";
        if (_cache[strCacheHangSo] == null)
        {
            try
            {
                dt = oSqlDataHelper.sExecuteDataSet("DANHMUC_TREE").Tables[1];
                if (dt == null) return null;
                if (dt.Rows.Count <= 0) return null;
                // Lưu giữ item trong cache
                // cùng với sliding expiration là 60 phút.
                HttpContext.Current.Cache.Insert(strCacheHangSo, dt, null, DateTime.Now.AddHours(5), Cache.NoSlidingExpiration);
            }
            catch (Exception ex)
            {
                OsPortal.oFileHelper.WriteLogErr(strClassName, "fncGetTree", ex.ToString());
            }
        }
        else
        {
            dt = (DataTable)_cache[strCacheHangSo];
        }
        return dt;
    }

    /// <summary>
    /// Kiểm tra sự tồn tại của danh mục
    /// </summary>
    /// <param name="strTenKoDau">Tên không dấu</param>
    /// <returns></returns>
    public static bool fncCheckExists(string strTenKoDau)
    {
        if (fncFilterData("dm_tieude_kodau='" + strTenKoDau + "'") != null) return true;
        else return false;
    }


    /// <summary>
    /// Lấy danh sách danh mục theo parrent ID
    /// </summary>
    /// <param name="parentID">Mã danh mục cha</param>
    /// <returns></returns>
    public static DataTable fncGetByParentID(int parentID)
    {
        return fncFilterData("dm_parent_id=" + parentID);
    }

    /// <summary>
    /// Lấy danh mục theo mã ID
    /// </summary>
    /// <param name="iDM_ID"></param>
    /// <returns></returns>
    public static DataTable fncGetByID(int iDM_ID)
    {
        return fncFilterData("DM_ID=" + iDM_ID);
    }

    /// <summary>
    /// Lấy số lượng danh mục con
    /// </summary>
    /// <param name="parentID">Mã danh mục cha</param>
    /// <returns></returns>
    public static int fncGetNumberSubItem(string strTieuDeKoDau)
    {
        int iDM_ID = fncGetIDByTenKoDau(strTieuDeKoDau);
        DataTable dt = fncGetByParentID(iDM_ID);
        int icount = 0;
        if (dt != null) icount = dt.Rows.Count;
        return icount;
    }

    /// <summary>
    /// Lấy mã bởi tiêu đề không dấu
    /// </summary>
    /// <param name="strTenKoDau">Tên không dấu</param>
    /// <returns></returns>
    public static int fncGetIDByTenKoDau(string strTenKoDau)
    {
        DataTable dt = fncFilterData("dm_tieude_kodau='" + strTenKoDau + "'");
        if (dt == null) return -1;
        return Convert.ToInt32(dt.Rows[0]["DM_ID"]);
    }

    /// <summary>
    /// Lấy danh sách danh mục theo tên không dấu
    /// </summary>
    /// <param name="strTenKoDau">Tên không dấu</param>
    /// <returns></returns>
    public static DataTable fncGetByTenKoDau(string strTenKoDau)
    {
        return fncFilterData("dm_tieude_kodau='" + strTenKoDau + "'");
    }

    /// <summary>
    /// Lọc dữ liệu tổng thế
    /// </summary>
    /// <param name="strWhere">Điều kiện VD: "TV_ID='" + TV_ID + "'"</param>
    /// <returns></returns>
    public static DataTable fncFilterData(string strWhere)
    {
        DataTable dt = null;
        try
        {
            dt = OsPortal.oDataHelper.filterData(fncGetAll(), strWhere);
            if (dt == null) return null;
            if (dt.Rows.Count <= 0) return null;
            return dt;
        }
        catch (Exception ex)
        {
            OsPortal.oFileHelper.WriteLogErr(strClassName, "fncFilterData", ex.ToString());
            return null;
        }
    }
}